/* Copyright 2024 Esri
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package com.esri.arcgismaps.kotlin.sampleviewer

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import com.esri.arcgismaps.kotlin.sampleviewer.navigation.NavGraph
import com.esri.arcgismaps.sample.sampleslib.components.MessageDialog
import com.esri.arcgismaps.sample.sampleslib.theme.SampleAppTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            SampleAppTheme {
                Surface(color = MaterialTheme.colorScheme.background) {
                    NavGraph()
                    HandleExceptions()
                }
            }
        }
    }

    /**
     * Responsible for managing incoming exceptions and displaying it as a dialog in the UI.
     */
    @Composable
    fun HandleExceptions() {
        var sampleViewerException by remember { 
            mutableStateOf(
                intent.extras?.let {
                    it.getStringArray("SampleViewerException") ?: arrayOf()
                } ?: arrayOf<String>()
            ) 
        }
        if (sampleViewerException.isNotEmpty()) {
            MessageDialog(
                onDismissRequest = { sampleViewerException = arrayOf() },
                title = sampleViewerException[0],
                description = sampleViewerException[1]
            )
        }
    }
}
